Bug 736125 - The default gtk accelerator mod mask does not include all default backen...
authorJohn Ralls <jralls@ceridwen.us>
Thu, 25 Dec 2014 00:10:12 +0000 (16:10 -0800)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 25 Aug 2015 19:54:58 +0000 (15:54 -0400)
gdk/gdkkeys.c
gdk/gdktypes.h
gdk/quartz/gdkkeys-quartz.c
gtk/gtkaccelgroup.c

index c651205f7a01f833318f51d889d24f560ae365b1..9302f425e9af00a0b65a02275d772b10aa7813ad 100644 (file)
@@ -653,6 +653,10 @@ gdk_keymap_real_get_modifier_mask (GdkKeymap         *keymap,
     case GDK_MODIFIER_INTENT_SHIFT_GROUP:
       return 0;
 
+    case GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK:
+      return (GDK_SHIFT_MASK   | GDK_CONTROL_MASK | GDK_MOD1_MASK    |
+             GDK_SUPER_MASK   | GDK_HYPER_MASK   | GDK_META_MASK);
+
     default:
       g_return_val_if_reached (0);
     }
index 4c355aa5eb653a928a18804ca531c32480860ef5..252922d569da949fefd696925c7b2ec469990882 100644 (file)
@@ -291,6 +291,11 @@ typedef enum
  *  input methods, and for use cases like typeahead search.
  * @GDK_MODIFIER_INTENT_SHIFT_GROUP: the modifier that switches between keyboard
  *  groups (AltGr on X11/Windows and Option/Alt on OS X).
+ * @GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK: The set of modifier masks accepted
+ * as modifiers in accelerators. Needed because Command is mapped to MOD2 on
+ * OSX, which is widely used, but on X11 MOD2 is NumLock and using that for a
+ * mod key is problematic at best.
+ * Ref: https://bugzilla.gnome.org/show_bug.cgi?id=736125.
  *
  * This enum is used with gdk_keymap_get_modifier_mask()
  * in order to determine what modifiers the
@@ -309,7 +314,8 @@ typedef enum
   GDK_MODIFIER_INTENT_EXTEND_SELECTION,
   GDK_MODIFIER_INTENT_MODIFY_SELECTION,
   GDK_MODIFIER_INTENT_NO_TEXT_INPUT,
-  GDK_MODIFIER_INTENT_SHIFT_GROUP
+  GDK_MODIFIER_INTENT_SHIFT_GROUP,
+  GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK,
 } GdkModifierIntent;
 
 typedef enum
index b2a52ed9f038bb4b009b42875b63f2e8f3ecd67a..f9857831c99050b3a3ed0da313920e27344ab1e7 100644 (file)
@@ -761,6 +761,11 @@ gdk_quartz_keymap_get_modifier_mask (GdkKeymap         *keymap,
     case GDK_MODIFIER_INTENT_SHIFT_GROUP:
       return GDK_MOD1_MASK;
 
+    case GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK:
+      return (GDK_SHIFT_MASK   | GDK_CONTROL_MASK | GDK_MOD1_MASK    |
+             GDK_MOD2_MASK    | GDK_SUPER_MASK   | GDK_HYPER_MASK   |
+             GDK_META_MASK);
+
     default:
       g_return_val_if_reached (0);
     }
index 0523efe87a0b7984ad01d542f7e81b147de44b9f..15a27d48d4fd1456d7fe4d9bd7b4ee9fcc429875 100644 (file)
@@ -73,12 +73,7 @@ static void accel_closure_invalidate     (gpointer    data,
 static guint  signal_accel_activate      = 0;
 static guint  signal_accel_changed       = 0;
 static guint  quark_acceleratable_groups = 0;
-static guint  default_accel_mod_mask     = (GDK_SHIFT_MASK   |
-                                            GDK_CONTROL_MASK |
-                                            GDK_MOD1_MASK    |
-                                            GDK_SUPER_MASK   |
-                                            GDK_HYPER_MASK   |
-                                            GDK_META_MASK);
+static guint  default_accel_mod_mask     = 0;
 
 enum {
   PROP_0,
@@ -1752,5 +1747,10 @@ gtk_accelerator_set_default_mod_mask (GdkModifierType default_mod_mask)
 GdkModifierType
 gtk_accelerator_get_default_mod_mask (void)
 {
+  if (!default_accel_mod_mask)
+    default_accel_mod_mask =
+      gdk_keymap_get_modifier_mask (gdk_keymap_get_default (),
+                                   GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK);
+
   return default_accel_mod_mask;
 }